package model

import (
	"time"

	"gorm.io/gorm"
)

// Attendance 考勤模型
// 用于记录员工的考勤信息，包括签到签退时间、考勤状态、请假记录等
type Attendance struct {
	ID        uint           `gorm:"primarykey" json:"id"` // 考勤记录ID，主键
	CreatedAt time.Time      `json:"created_at"`           // 记录创建时间
	UpdatedAt time.Time      `json:"updated_at"`           // 记录更新时间
	DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`       // 软删除时间

	UserID    uint      `gorm:"not null;index" json:"user_id"`    // 关联用户ID，用于标识考勤记录所属员工
	Date      time.Time `gorm:"not null;index" json:"date"`       // 考勤日期，用于记录考勤所属日期
	CheckIn   time.Time `json:"check_in"`                         // 签到时间，记录员工上班打卡时间
	CheckOut  time.Time `json:"check_out"`                        // 签退时间，记录员工下班打卡时间
	Status    int       `gorm:"not null;default:0" json:"status"` // 考勤状态：0-未签到，1-已签到，2-已签退，3-迟到，4-早退，5-缺勤
	Location  string    `gorm:"size:200" json:"location"`         // 打卡位置，记录员工打卡时的地理位置信息
	Remark    string    `gorm:"size:500" json:"remark"`           // 备注信息，用于记录特殊情况说明
	LeaveType int       `gorm:"default:0" json:"leave_type"`      // 请假类型：0-无，1-事假，2-病假，3-年假，4-调休
	LeaveTime float32   `gorm:"default:0" json:"leave_time"`      // 请假时长，单位为小时

	User User `gorm:"foreignKey:UserID" json:"user"` // 关联用户信息，建立与User模型的关联关系
}
